/**
 * 使用_proto_这个属性要注意，可能浏览器不支持抛出这个方法，最稳妥的还是使用Object.setPrototypeOf()这个方法
 */
function FakeNew(...args){
    let obj = Object.create(null);
    Constructor = args[0] //获得第一个参数，这就是构造函数
    args.shift();
    //绑定原型
    //obj._proto_ = Constructor.prototype;// 这个是不行的node环境下不支持、Chrome也不支持
     Object.setPrototypeOf(obj,Constructor.prototype)//将这个对象的_proto_属性绑定到构造函数的原型对象上去，
    //当obj中找不到属性时，就去它的原型链也就是Constructor.prototype中去找
    var res = Constructor.apply(obj, args);
    // console.log(res,obj)
    return typeof res === 'object' ? res : obj
}

function Person(name){
    this.name = name;
    return this; //这里需要返回一个这个实例
}
Person.prototype.getName = function(){
    return this.name;
}
let p1 = FakeNew(Person,"小明");

console.log(p1.name);
console.log(p1.getName());


// let obj ={
//     name:"xiaoming",
//     sayName:function(){
//         console.log(this.name);
//     }
// }
// let newobj = Object.create(obj);
// newobj.age = 18;
// newobj.sayName()




